package com.sojson.util.file.interfaces;

import java.io.InputStream;

/**
 * 文件存储系统接口
 * 
 * @author liu
 * @Date 2020-06-28 10:55:28
 * @Description
 *
 */
public interface FileSystemInterface {

    /**
     * 将本地文件上传到服务器
     * 
     * @param filePath 本地文件路径
     * @return 
     * @throws Exception
     */
    String upload(String filePath) throws Exception;

    /**
     * 将本地文件上传到服务器
     * 
     * @param fileName 文件名
     * @param filePath 本地文件路径
     * @return 
     * @throws Exception
     */
    String uploading(String fileName, String filePath) throws Exception;

    /**
     * 将本地文件上传到服务器
     * 
     * @param fileSuffix 文件后缀
     * @param filePath 本地文件路径
     * @return 
     * @throws Exception
     */
    String uploadingBySuffix(String fileSuffix, String filePath) throws Exception;

    /**
     * 将本地文件上传到服务器
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param filePath 本地文件路径
     * @return 
     * @throws Exception
     */
    String upload(String bucketName, String filePath) throws Exception;

    /**
     * 将本地文件上传到服务器
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param fileSuffix 文件后缀
     * @param filePath 本地文件路径
     * @return
     * @throws Exception
     */
    String uploading(String bucketName, String fileSuffix, String filePath) throws Exception;

    /**
     * 将本地文件上传到服务器
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param fileName 文件名
     * @param filePath 本地文件路径
     * @return
     * @throws Exception
     */
    String upload(String bucketName, String fileName, String filePath) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param bytes 文件的字节流
     * @param fileSuffix 文件后缀
     * @return 
     * @throws Exception
     */
    String uploading(byte[] bytes, String fileSuffix) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param bytes 文件的字节流
     * @param fileName 文件名
     * @return 
     * @throws Exception
     */
    String upload(byte[] bytes, String fileName) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param bytes 文件的字节流
     * @param fileSuffix 文件后缀
     * @param bucketName 服务器文件路径(一级目录)
     * @return
     * @throws Exception
     */
    String uploading(byte[] bytes, String fileSuffix, String bucketName) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param bytes 文件的字节流
     * @param fileName 文件名
     * @param bucketName 服务器文件路径(一级目录)
     * @return
     * @throws Exception
     */
    String upload(byte[] bytes, String fileName, String bucketName) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param inputStream 文件的输入流
     * @param fileSuffix 文件后缀
     * @return 
     * @throws Exception
     */
    String uploading(InputStream inputStream, String fileSuffix) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param inputStream 文件的输入流
     * @param fileName 文件名
     * @return 
     * @throws Exception
     */
    String upload(InputStream inputStream, String fileName) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param inputStream 文件的输入流
     * @param fileSuffix 文件后缀
     * @param bucketName 服务器文件路径(一级目录)
     * @return
     * @throws Exception
     */
    String uploading(InputStream inputStream, String fileSuffix, String bucketName) throws Exception;

    /**
     * 将文件流上传到服务器
     * 
     * @param inputStream 文件的输入流
     * @param fileName 文件名
     * @param bucketName 服务器文件路径(一级目录)
     * @return
     * @throws Exception
     */
    String upload(InputStream inputStream, String fileName, String bucketName) throws Exception;

    /**
     * 根据Key删除文件
     * 
     * @param key 密钥(上传后返回的字符串)
     * @return 成功还是失败(true:成功,false:失败)
     * @throws Exception
     */
    boolean remove(String key) throws Exception;

    /**
     * 根据Key删除文件
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @return 成功还是失败(true:成功,false:失败)
     * @throws Exception
     */
    boolean remove(String bucketName, String key) throws Exception;

    /**
     * 从服务器下载文件到本地
     * 
     * @param key 密钥(上传后返回的字符串)
     * @return 
     * @throws Exception
     */
    boolean download(String key) throws Exception;

    /**
     * 从服务器下载文件到本地
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @return 
     * @throws Exception
     */
    boolean downloading(String bucketName, String key) throws Exception;

    /**
     * 从服务器下载文件到本地
     * 
     * @param key 密钥(上传后返回的字符串)
     * @param targetPath 本地文件路径
     * @return 
     * @throws Exception
     */
    boolean download(String key, String targetPath) throws Exception;

    /**
     * 从服务器下载文件到本地
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @param targetPath 本地文件路径
     * @return 
     * @throws Exception
     */
    boolean download(String bucketName, String key, String targetPath) throws Exception;

    /**
     * 根据Key获取文件流
     * 
     * @param key 密钥(上传后返回的字符串)
     * @return 文件字节流
     * @throws Exception
     */
    byte[] downloadGetBytes(String key) throws Exception;

    /**
     * 根据Key获取文件流
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @return 文件字节流
     * @throws Exception
     */
    byte[] downloadGetBytes(String bucketName, String key) throws Exception;

    /**
     * 根据Key获取文件流
     * 
     * @param key 密钥(上传后返回的字符串)
     * @return 
     * @throws Exception
     */
    InputStream downloadGetInputStream(String key) throws Exception;

    /**
     * 根据Key获取文件流
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @return 
     * @throws Exception
     */
    InputStream downloadGetInputStream(String bucketName, String key) throws Exception;

    /**
     * 根据Key获取Url
     * 
     * @param key 密钥(上传后返回的字符串)
     * @return 得到的Url
     * @throws Exception
     */
    String getUrl(String key) throws Exception;

    /**
     * 根据Key获取Url
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @return 得到的Url
     * @throws Exception
     */
    String getUrl(String bucketName, String key) throws Exception;

    /**
     * 根据Key获取Url(临时路径)
     * 
     * @param key 密钥(上传后返回的字符串)
     * @return 得到的Url
     * @throws Exception 
     */
    String getUrlTemporary(String key) throws Exception;

    /**
     * 根据Key获取Url(临时路径)
     * 
     * @param key 密钥(上传后返回的字符串)
     * @param timeout 地址超时时间(单位: 毫秒)
     * @return 得到的Url
     * @throws Exception 
     */
    String getUrlTemporary(String key, long timeout) throws Exception;

    /**
     * 根据Key获取Url(临时路径)
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @return 得到的Url
     * @throws Exception 
     */
    String getUrlTemporary(String bucketName, String key) throws Exception;

    /**
     * 根据Key获取Url(临时路径)
     * 
     * @param bucketName 服务器文件路径(一级目录)
     * @param key 密钥(上传后返回的字符串)
     * @param timeout 地址超时时间(单位: 毫秒)
     * @return 得到的Url
     * @throws Exception 
     */
    String getUrlTemporary(String bucketName, String key, long timeout) throws Exception;

}